package com.wildeman.tokati.core;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class Grupo implements Serializable
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Identificador del grupo
	 */
	private int idGrupo;
	
	/**
	 * Nombre del grupo
	 */
	private String nombreGrupo;
	
	/**
	 * Flag que indica si el grupo es favorito o no
	 */
	private boolean favorito;
	
	/**
	 * identificador de la categoria del grupo pe: 0-ninguna; 1-personas; 2-lugares; 3-actividades; 4-otros objetos
	 */
	private int idCategoria;
	
	/**
	 * Integrantes del grupo
	 */
	private List<Miembro> integrantes;
	
	
	public Grupo() 
	{
		super();
		this.idGrupo = -1;
		this.nombreGrupo = "";
		this.idCategoria = 0; //ninguna
		integrantes = new ArrayList<Miembro>();
	}
	
	public Grupo(String nombreGrupo) 
	{
		super();
		this.idGrupo = -1;
		this.nombreGrupo = nombreGrupo;
		this.idCategoria = 0; //ninguna
		integrantes = new ArrayList<Miembro>();
	}
	
	public Grupo(int id_grupo,String nombre_grupo, boolean es_favorito) 
	{
		super();
		this.idGrupo = id_grupo;
		this.nombreGrupo = nombre_grupo;
		this.favorito = es_favorito;
		this.idCategoria = 0; //ninguna
		integrantes = new ArrayList<Miembro>();
	}
	
	public Grupo(int id_grupo,String nombre_grupo, boolean es_favorito, int id_categoria)
	{
		super();
		this.idGrupo = id_grupo;
		this.nombreGrupo = nombre_grupo;
		this.favorito = es_favorito;
		this.idCategoria = id_categoria; //ninguna
		integrantes = new ArrayList<Miembro>();
	}
	
	public Grupo(int id_grupo,String nombre_grupo, boolean es_favorito, List<Miembro> lista_miembros) 
	{
		super();
		this.idGrupo = id_grupo;
		this.nombreGrupo = nombre_grupo;
		this.favorito = es_favorito;
		integrantes = lista_miembros;
	}



	/**
	 * Agrega un nuevo integrante al gripo
	 * @param nuevoMiembro
	 * @return Numero de integrantes que tiene el grupo
	 * @throws Exception En caso de no poder agregar un integrante al grupo
	 */
	public int agregarMiembro(Miembro nuevoMiembro)
	{
		this.integrantes.add(nuevoMiembro);
		
		return this.integrantes.size();
	}
	
	public Miembro[] getMiembros() 
	{
		Miembro[] arrMiembros = new Miembro[nroMiembros()];
		
		for (int i=0; i < nroMiembros(); i++)
		{
			arrMiembros[i] = this.integrantes.get(i);
		}
		
		return arrMiembros;
	}



	public String getNombreGrupo() 
	{
		return nombreGrupo;
	}


	public void setNombreGrupo(String nombreGrupo)
	{
		this.nombreGrupo = nombreGrupo;
	}


	public List<Miembro> getIntegrantes()
	{
		return integrantes;
	}
	
	public void setIntegrantes(List<Miembro> integrantes) {
		this.integrantes = integrantes;
	}

	public int getIdGrupo() {
		return idGrupo;
	}

	public void setIdGrupo(int idGrupo) {
		this.idGrupo = idGrupo;
	}

	public boolean isFavorito() {
		return favorito;
	}

	public void setFavorito(boolean favorito) {
		this.favorito = favorito;
	}

	@Override
	public String toString() 
	{
		// TODO Auto-generated method stub
		return "Id-grupo: "+ this.idGrupo + " Nombre-grupo: " + this.nombreGrupo + " Es-favorito:" + this.favorito + " Nro-miembros: " + this.integrantes.size();
	}
	
	public int nroMiembros()
	{
		return this.integrantes.size();
	}

	public int getIdCategoria() {
		return idCategoria;
	}

	public void setIdCategoria(int idCategoria) {
		this.idCategoria = idCategoria;
	}

}
